package com.woniu.order.util.config;


import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class RabbitMQConfig {
    @Bean
    public Queue registerPhoneQueue(){
        return new Queue("register_phone_queue",true,false,false,null);
    }
    @Bean
    public Queue insertPhoneQueue(){
        return new Queue("insert_phone_queue",true,false,false,null);
    }
    //死信队列
    @Bean
    public Queue delayOrderQueue() {
        Map<String, Object> params = new HashMap<>();
        //定义该队列中消息的生存时间 单位毫秒 生存时间最终对应业务的延迟执行时间
        params.put("x-message-ttl", 2 * 60 * 1000);
        // x-dead-letter-exchange 属性用于声明死信转发到的交换机
        params.put("x-dead-letter-exchange", "del-cache_delay_exchange");
        // x-dead-letter-routing-key 声明了这些死信在转发时携带的路由键名称。
        params.put("x-dead-letter-routing-key", "pay");
        return new Queue("order_num_delay_queue", true, false, false, params);
    }
    //队列
    @Bean
    public Queue delQueue(){
        return new Queue("del_queue",true,false,false,null);
    }
    //交换机
    @Bean
    public DirectExchange deorderNumDelayExchange(){
        //创建交换机用于将死信通过交换机转发到其他队列中
        return new DirectExchange("del-cache_delay_exchange");
    }
    //绑定队列与交换机
    @Bean
    public Binding bindOrderNumQueue(){
        return BindingBuilder.bind(delQueue()).to(deorderNumDelayExchange()).with("pay");

    }

    @Bean
    public Queue RefundQueue(){
        return new Queue("refund_queue");
    }


    //定义一个队列并且要设置时间以及死信转发交换机
//    @Bean
//    public Queue deleteCacheDelayQueue(){
//        HashMap<String, Object> Map = new HashMap<>();
//        //定义该队列中消息的生存时间 单位毫秒 生存时间最终对应业务的延迟执行时间
//        Map.put("x-message-ttl", 10 * 1000);
//        // x-dead-letter-exchange 属性用于声明死信转发到的交换机
//        Map.put("x-dead-letter-exchange", "del_cache_delay_exchange");
//        // x-dead-letter-routing-key 声明了这些死信在转发时携带的路由键名称。
//        Map.put("x-dead-letter-routing-key", "delay");
//        return new Queue("del_cache_delay_queue",true,false,false,Map);
//
//    }
//    //创建一个交换机用于转发过期的延迟消息
//    @Bean
//    public DirectExchange deleteCacheDelayExchage(){
//        return  new DirectExchange("del_cache_delay_exchange");//交换机
//    }
//
//    //创建一个对于用于储存死信消息和消息
//    @Bean
//    public Queue delCacheQueue(){//消息队列
//        return  new Queue("del_cache_queue");
//    }
//
//    //绑定队列与交换机
//    @Bean
//    public Binding binDelCacheQueue(){
//        return BindingBuilder.bind(delCacheQueue()).to(deleteCacheDelayExchage()).with("delay");
//    }
//    @Bean
//    public Queue orderNumDelayQueue(){//延迟队列放订单号
//        HashMap<String, Object> Map = new HashMap<>();
//        //定义该队列中消息的生存时间 单位毫秒 生存时间最终对应业务的延迟执行时间
//        Map.put("x-message-ttl", 60 * 1000);
//        // x-dead-letter-exchange 属性用于声明死信转发到的交换机
//        Map.put("x-dead-letter-exchange", "ordernum_delay_exchange");
//        // x-dead-letter-routing-key 声明了这些死信在转发时携带的路由键名称。
//        Map.put("x-dead-letter-routing-key", "pay");
//        return new Queue("ordernum_delay_queue",true,false,false,Map);
//
//    }
//    //创建一个交换机用于转发过期的延迟消息
//    @Bean
//    public DirectExchange orderNumDelayExchange(){
//        return  new DirectExchange("ordernum_delay_exchange");//交换机
//    }
//    //创建一个对于用于储存死信消息和消息
//    @Bean
//    public Queue orderNumQueue(){//消息队列
//        return  new Queue("ordernum_queue");
//    }
//
//    //绑定队列与交换机
//    @Bean
//    public Binding bindOrdernumQueue(){
//        return BindingBuilder.bind(orderNumQueue()).to(orderNumDelayExchange()).with("pay");
//    }
}
